tweaking
Brotli
public class BrotliCompressionProvider : ICompressionProvider
{
private readonly CompressionLevel? _compressionLevel;
public BrotliCompressionProvider(CompressionLevel compressionLevel)
{
_compressionLevel = compressionLevel;
}
public BrotliCompressionProvider()
{
}
public string EncodingName => "br"; // Must match grpc-accept-encoding
public Stream CreateCompressionStream(Stream outputStream, CompressionLevel? compressionLevel)
{
if (_compressionLevel.HasValue)
return new BrotliStream(outputStream, compressionLevel ?? _compressionLevel.Value, true);
else if (!_compressionLevel.HasValue && compressionLevel.HasValue)
return new BrotliStream(outputStream, compressionLevel.Value, true);
return new BrotliStream(outputStream, CompressionLevel.Fastest, true);
}
public Stream CreateDecompressionStream(Stream stream)
{
return new BrotliStream(stream, CompressionMode.Decompress);
}
}
To enable this,
Enable
builder.Services.AddGrpc(options => {
options.EnableDetailedErrors = true;
options.MaxReceiveMessageSize = 6291456; // 6 MB
options.MaxSendMessageSize = 6291456; // 6 MB
options.CompressionProviders = new List<ICompressionProvider>
{
new BrotliCompressionProvider() // br
};
options.ResponseCompressionAlgorithm = "br"; // grpc-accept-encoding
options.ResponseCompressionLevel = CompressionLevel.Optimal; // compression level used if not set on the provider
options.Interceptors.Add<ExceptionInterceptor>(); // Register custom ExceptionInterceptor interceptor
});
Pr per service
Title
services.AddGrpc().AddServiceOptions<MyService>(options =>
{
options.MaxReceiveMessageSize = 2 * 1024 * 1024; // 2 MB
options.MaxSendMessageSize = 5 * 1024 * 1024; // 5 MB
});
Enable server reflection
Reflection is helpful if we want to allow discovery of our gRPC definitions from tools like Postman. To enable it:
- install X NuGet package
builder.Services.AddGrpcReflection()
To test it: Open Postman ///TBA